Шаг 47 - IEnumVARIANT::Next.

Пытается получить следующие celt элементов последовательности перечисления и возвращает их в массиве, на который указывает rgvar.

HRESULT Next
( 
unsigned long celt, 
VARIANT FAR* rgvar, 
unsigned long FAR* pceltFetched
);

Параметры
celt
Число запрашиваемых элементов.
rgvar
Массив, в который помещаются возвращающие элементы. Размер массива должен быть не менее celt.
pceltFetched
Указатель на число элементов, возвращенных в rgvar, или NULL.

Коды возврата
Из возвращенного HRESULT получают один из следующих кодов возврата:
Код возврата Значение
S_OK Число возвращенных элементов равно celt.
S_FALSE Число возвращенных элементов меньше celt.

Комментарии
Если число оставшихся элементов меньше запрошенного, Next возвращает только оставшиеся элементы. Фактическое число элементов передается через *pCeltFetched, если этот параметр не равен NULL.

Пример
Следующий код реализует IEnumVARIANT::Next для наборов из примера Lines (файл Enumvar.cpp).

STDMETHODIMP
CEnumVariant::Next(ULONG cElements, VARIANT FAR* pvar, ULONG FAR* pcElementFetched)
{
HRESULT hr;
ULONG l;
long l1;
ULONG l2;

if (pcElementFetched != NULL) *pcElementFetched = 0;

for (l=0; l< cElements; l++) Variantlnit(&pvar[l]);

// Получить следующие cElements элементов.

for (l1=m_lCurrent, 12=0; l1<(long)(m_lLBound+m_cElements) && 12<cElements; l1++, 12++) 
{
hr = SafeArrayGetElement(m_psa, &l1, &pvar[12]); 
if (FAILED(hr)) goto error;

// Возвратить число полученных элементов.
if (pcElementFetched != NULL)
*pcElementFetched = 12; 
m_lCurrent = l1;

return (12 < cElements) ? ResultFromScode(S_FALSE) : NOERROR;
error:

for (1=0;  l<cElements;  l++) VariantClear(&pvar[l]); 
return hr;
Hosted by uCoz